package org.star.dolphin.utils;

import org.star.dolphin.constant.DateConstant;
import org.apache.commons.lang3.StringUtils;
import org.springframework.util.ObjectUtils;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class DateUtil {

    /**
     * 字符串转日期
     *
     * @param dateTimeStr
     * @param format
     * @return
     */
    public static Date dateTimeStr2DateTime(String dateTimeStr, String format) {
        try {
            return new SimpleDateFormat(format).parse(dateTimeStr);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 获取后一天时间
     * 格式默认 yyyy-MM-dd HH:mm:ss
     *
     * @param dayNum 天数
     * @return
     */
    public static String getAfterDateTime(Integer dayNum) {
        return getAfterDateTime(dayNum, DateConstant.FORMAT.DATE_TIME_2);
    }

    /**
     * 获得后一天时间
     *
     * @param dayNum 天数
     * @param format 格式
     * @return
     */
    public static String getAfterDateTime(Integer dayNum, String format) {
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        Date date = new Date();
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.DAY_OF_MONTH, dayNum);
        date = calendar.getTime();
        return sdf.format(date);
    }

    /**
     * 获取之前的时间
     *
     * @param dayNum 天数
     * @param format 格式
     * @return
     */
    public static String getBeforeDateTime(Integer dayNum, String format) {
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        Date date = new Date();
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.DAY_OF_MONTH, -dayNum);
        date = calendar.getTime();
        return sdf.format(date);
    }

    /**
     * 获取之前的时间
     * 格式默认 yyyy-MM-dd HH:mm:ss
     *
     * @param dayNum 天数
     * @return
     */
    public static String getBeforeDateTime(Integer dayNum) {
        return getBeforeDateTime(dayNum, DateConstant.FORMAT.DATE_TIME_2);
    }

    /**
     * 获取精确到秒的时间戳
     *
     * @return
     */
    public static Integer getSecondTimestampTwo() {
        String timestamp = String.valueOf(System.currentTimeMillis() / 1000);
        return Integer.valueOf(timestamp);
    }

    /**
     * 时间戳转日期时间
     * 格式默认
     *
     * @param seconds
     * @return
     */
    public static String timeStamp2DateStr(Long seconds) {
        return timeStamp2DateStr(seconds, null);
    }

    /**
     * 时间戳转日期时间
     * 需要指定转换格式若不指定则转换为时间戳转日期时间
     *
     * @param seconds
     * @param format
     * @return
     */
    public static String timeStamp2DateStr(Long seconds, String format) {
        try {
            if (ObjectUtils.isEmpty(seconds)) {
                return null;
            }

            //默认格式
            if (StringUtils.isBlank(format)) {
                format = DateConstant.FORMAT.DATE_TIME_2;
            }
            return new SimpleDateFormat(format).format(new Date(seconds));
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 时间转时间戳
     *
     * @param dateTime
     * @param format
     * @return
     */
    public static Long date2Timestamp(String dateTime, String format) {
        try {
            if (ObjectUtils.isEmpty(dateTime)) {
                return null;
            }

            //默认格式
            if (StringUtils.isBlank(format)) {
                format = DateConstant.FORMAT.DATE_TIME;
            }
            Date date = new SimpleDateFormat(format).parse(dateTime);
            return date.getTime();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }


    /*public static void main(String[] args) {
        *//*Long ts = date2Timestamp("2019年01月01日 01点01分01秒", null);
        System.out.println("时间戳：" + ts);
        System.out.println("时间：" + timeStamp2DateStr(ts, null));

        Long yesterday = DateUtil.date2Timestamp(DateUtil.getBeforeDateTime(0, DateConstant.FORMAT.DATE_1), DateConstant.FORMAT.DATE_1);
        System.out.println("昨天时间戳：" + yesterday);

        Long tomorrow = DateUtil.date2Timestamp(DateUtil.getAfterDateTime(1, DateConstant.FORMAT.DATE_1), DateConstant.FORMAT.DATE_1);
        System.out.println("明天时间戳：" + tomorrow);

        String dt = getBeforeDateTime(8);
        System.out.println(dt);
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(dateTimeStr2DateTime("2019年01月01日", DateConstant.FORMAT.DATE));
        Integer now_y = calendar.get(Calendar.YEAR);//得到年份
        Integer now_m = calendar.get(Calendar.MONTH) + 1;//得到月份
        System.out.println("年:" + now_y);
        System.out.println("月:" + now_m);*//*

        System.out.println(DateUtil.getBeforeDateTime(0, DateConstant.FORMAT.DATE_3));
    }*/

}
